home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-03 / nrface21.zip / IPDEMO.BAS < prev    next >
BASIC Source File  |  1990-05-05  |  55KB  |  2,744 lines

  1. DEFINT A-Z
  2. DIM drive$(8)
  3. '============================== Define Types ================================
  4. '======Needed for mouse, memory size, and screen print
  5.  
  6.  
  7. TYPE register              'for CALL INTERRUPT
  8.      ax    AS INTEGER
  9.      bx    AS INTEGER
  10.      cx    AS INTEGER
  11.      dx    AS INTEGER
  12.      bp    AS INTEGER
  13.      si    AS INTEGER
  14.      di    AS INTEGER
  15.      flags AS INTEGER
  16.      ds    AS INTEGER
  17.      es    AS INTEGER
  18. END TYPE
  19. DIM regs AS register
  20.  
  21.  
  22. '===================== Declare Procedures and Functions =====================
  23.  
  24. DECLARE SUB MouseBar.Menu (sel, sel$(), fg, bg, pchar, msg$, topline, submenu, mouse$)
  25. DECLARE SUB Interrupt (intnum AS INTEGER, inreg AS register, outreg AS register)
  26. DECLARE SUB MouseDriver (m0%, m1%, m2%, m3%)
  27. DECLARE SUB MouseInit (mouse$)
  28. DECLARE SUB MouseOn ()
  29. DECLARE SUB MouseOff ()
  30. DECLARE SUB MouseGetInfo (mousex, mousey, isbutton$, mouse$, a$)
  31. DECLARE SUB MakeBox (title$, uly, ulx, bwide, bhigh, linesty, fg, bg, pchar)
  32. DECLARE SUB MoveMouse (mmousey, mmousex)
  33. DECLARE SUB SetMemDta (memdta$)
  34. DECLARE SUB FirstFile (filespec$, filename$)
  35. DECLARE SUB NextFile (filename$)
  36. DECLARE SUB MakeName (fullname$)
  37. DECLARE SUB WhatKey (keypress$)
  38. DECLARE SUB WaitaBit (hold!)
  39. DECLARE SUB GetVer (version)
  40.  
  41.  
  42. '=========================== Main Control Program ===========================
  43.  
  44. 'Initialization routine -- runs only once
  45.  
  46. '====================DO NOT REMOVE THIS LINE!=============================
  47. IFaceCopyRight$ = "Interface Plus -- Copyright 1990 by George Campbell"
  48. '=====IT MUST BE IN ALL PROGRAMS USING THIS INTERFACE --NEVER DISPLAYS====
  49.  
  50.  
  51. DIM sel$(7, 10)
  52. ON ERROR GOTO GetError
  53. GOSUB ParseCommandLine
  54. GOSUB GetEnvir
  55. GOSUB GetConfig
  56. GOSUB ColorInit
  57. GOSUB GetOldDir
  58. GOSUB ScreenTest
  59. GOSUB MemSize
  60. CALL GetVer(version)
  61.  
  62. '=====SEE THE DOCS REGARDING THE DRIVETEST ROUTINE, WHICH
  63. '=====MAY LEAVE FILES BEHIND ON SOME LOGICAL DRIVES. NO
  64. '=====HARM IS DONE BY THESE FILES, BUT YOU MAY DECIDE TO
  65. '=====ELIMINATE THIS ROUTINE FROM YOUR PROGRAMS. I HAVE
  66. '=====REMMED THEM OUT.
  67. REM GOSUB InputBox
  68. REM LOCATE 16, 24
  69. REM PRINT "Setting up .... Please wait!"
  70. REM GOSUB DriveTest
  71.  
  72. CALL MouseInit(mouse$)
  73.  
  74. '=====Random Shareware Screen Displayer
  75. RANDOMIZE TIMER
  76. x = INT(RND * 4) + 1
  77. IF x = 2 THEN GOSUB ShareInfo
  78.  
  79. '=====Starts the menu presentation.  GOTOs in the SELECT CASE
  80. '=====sections return to this point.
  81.  
  82. BEGIN:
  83. a$ = ""
  84. generrorflag = 0
  85. isbutton$ = ""
  86.  
  87. '====== Define the Main Menu titles
  88. '====== Should have different first letters
  89. '====== You can include more main entries, but you must change
  90. '====== the DIM sel() line above to add.
  91.  
  92. sel$(0, 0) = " F)ile  "
  93. sel$(1, 0) = " P)rinter  "
  94. sel$(2, 0) = " E)xamples  "
  95. sel$(3, 0) = " S)etup  "
  96. sel$(4, 0) = " T)ools  "
  97. sel$(5, 0) = " D)emos  "
  98. sel$(6, 0) = " H)elp  "
  99.  
  100. '===== Define Help messages for line 25
  101. '======Up to 80 characters -- truncates if longer
  102.  
  103. sel$(0, 10) = "Perform file and DOS operations"
  104. sel$(1, 10) = "Printer control tools"
  105. sel$(2, 10) = "Examples of Interface Plus Power"
  106. sel$(3, 10) = "Set Program parameters and defaults"
  107. sel$(4, 10) = "More Interface Plus demos"
  108. sel$(5, 10) = "Demonstrate Interface Plus tools"
  109. sel$(6, 10) = "Help with this program"
  110.  
  111. '===== Define Submenu titles For  "File" (0,0)
  112.  
  113. sel$(0, 1) = " Display directory of files " + "[" + UCASE$(newdir$) + "]"
  114.     IF newmask$ = "" AND version > 2 THEN mask$ = "*.*"
  115.     IF newmask$ = "" AND version < 3 THEN mask$ = "????????.???"
  116.     IF NOT newmask$ = "" THEN mask$ = newmask$
  117. sel$(0, 2) = " Select file mask " + "[" + UCASE$(mask$) + "]"
  118. sel$(0, 3) = " Change directory "
  119. sel$(0, 4) = " Select A File " + "[" + RTRIM$(filechoice$) + "]"
  120. sel$(0, 5) = " This Space Available"
  121. sel$(0, 6) = " Shell to DOS "
  122. sel$(0, 7) = " Quit program "
  123. sel$(0, 8) = ""
  124.  
  125. '===== Define Submenu titles For  "Printer" (1,0)
  126.  
  127. sel$(1, 1) = " This Space Available"
  128. sel$(1, 2) = " Send Formfeed to printer "
  129. sel$(1, 3) = " Send Reset to printer "
  130. sel$(1, 4) = " This space available "
  131. sel$(1, 5) = " This space available "
  132. sel$(1, 6) = " Print the screen "
  133. sel$(1, 7) = " This space available"
  134. sel$(1, 8) = ""
  135.  
  136. '==== Define Submenu titles for "Examples" (2,0)
  137.  
  138. sel$(2, 1) = " Demo of Menu Intelligence"
  139. sel$(2, 2) = " Demo Mouse Positioning"
  140. sel$(2, 3) = " This Space available"
  141. sel$(2, 4) = " This Space available"
  142. sel$(2, 5) = " This Space available"
  143. sel$(2, 6) = " This Space Available"
  144. sel$(2, 7) = " This Space available"
  145. sel$(2, 8) = ""
  146.  
  147. 'Define Submenu titles for "Setup" (3,0)
  148.  
  149. sel$(3, 1) = " This Space available"
  150. sel$(3, 2) = " This Space available"
  151. sel$(3, 3) = " This Space available"
  152. sel$(3, 4) = " Set screen colors"
  153. sel$(3, 5) = " This Space available"
  154. sel$(3, 6) = " Save configuration (becomes default)"
  155. sel$(3, 7) = " Delete old configuration file"
  156. sel$(3, 8) = ""
  157.  
  158. 'Define Submenu titles for "Tools" (4,0)
  159.  
  160. sel$(4, 1) = " GETFILES"
  161. sel$(4, 2) = " What Interface PLUS Knows"
  162. sel$(4, 3) = " Demo Key Identification Routine"
  163. sel$(4, 4) = " This Space available"
  164. sel$(4, 5) = " This Space available"
  165. sel$(4, 6) = " This Space available"
  166. sel$(4, 7) = " Back to Intelligent Menu Demo"
  167. sel$(4, 8) = ""
  168.  
  169. 'Define Submenu titles for "Demos" (5,0)
  170.  
  171. sel$(5, 1) = " Demo MakeBox SUB"
  172. sel$(5, 2) = " Demo ASCII File Display "
  173. sel$(5, 3) = " Registration Information "
  174. sel$(5, 4) = " Display System Memory"
  175. sel$(5, 5) = " Demo moveable Y/N button"
  176. sel$(5, 6) = " Demo fixed Y/N button"
  177. sel$(5, 7) = " Demo moveable OK button"
  178. sel$(5, 8) = ""
  179.  
  180. 'Define Submenu titles for "Help" (6,0)
  181.  
  182. sel$(6, 1) = " Command line options "
  183. sel$(6, 2) = " Read manual "
  184. sel$(6, 3) = " This Space available"
  185. sel$(6, 4) = " This Space available"
  186. sel$(6, 5) = " This Space available"
  187. sel$(6, 6) = " This Space available"
  188. sel$(6, 7) = " This Space available"
  189. sel$(6, 8) = ""
  190.  
  191. '===== Define Top Row Message
  192.  
  193. msg$ = "╡ Use Mouse/Cursor/Letter/Number Keys To Make Selections ╞"
  194.  
  195.  
  196. '===== Make Call to MouseBar.Menu and Restart Selection Routine========
  197.  
  198.  
  199. MoveMouse mmousey + 1, mmousex + 1
  200. IF mmousey = 0 THEN
  201.     MoveMouse 12, 40
  202. END IF
  203. REM KEY(1) OFF
  204. CALL MouseBar.Menu(sel, sel$(), fg, bg, pchar, msg$, topline, submenu, mouse$)
  205.  
  206. '===== Do the desired Selection
  207.  
  208.  
  209. MouseOff
  210. '===== The next set of routines are the calls to your routines,
  211. '===== based on the choice made in MouseBar.Menu.
  212.      
  213.       SELECT CASE sel
  214.  
  215.  
  216.          CASE 1
  217. GOSUB GetFiles
  218. topline = 0
  219. submenu = 1
  220. GOTO BEGIN
  221.  
  222.          CASE 2
  223. GOSUB GetMask
  224. help$ = "MASK"
  225. topline = 0
  226. submenu = 1
  227. GOTO BEGIN
  228.         
  229.          CASE 3
  230. GOSUB GetDir
  231. topline = 0
  232. submenu = 1
  233. GOTO BEGIN
  234.  
  235.  
  236.          CASE 4
  237. chooseone$ = "Y"
  238. GOSUB GetFiles
  239. topline = 0
  240. submenu = 1
  241. GOTO BEGIN
  242.  
  243.  
  244.          CASE 5
  245. topline = 0
  246. submenu = 1
  247. GOSUB OkButton
  248. GOTO BEGIN
  249.  
  250.          CASE 6
  251. GOSUB ShellOut
  252. topline = 0
  253. submenu = 1
  254. GOTO BEGIN
  255.  
  256.          CASE 7
  257. GOSUB InputBox
  258. LOCATE 16, 12
  259. PRINT "Are you sure you want to quit (Y/N)? ";
  260. LOCATE 18, 12
  261. PRINT "Press Y or N or click with mouse."
  262. GOSUB YesNoButton
  263. IF NOT response$ = "Y" THEN
  264.     topline = 0
  265.     submenu = 1
  266.     GOTO BEGIN
  267. END IF
  268. COLOR fg, bg
  269. GOSUB quit
  270. CLS
  271. END
  272.            
  273.  
  274.     CASE 11
  275. topline = 0
  276. submenu = 1
  277. GOSUB OkButton
  278. GOTO BEGIN
  279.  
  280.  
  281.     CASE 12
  282. ON ERROR GOTO noprint
  283. LPRINT CHR$(12)
  284. ON ERROR GOTO 0
  285. topline = 0
  286. submenu = 1
  287. GOTO BEGIN
  288.  
  289.     CASE 13
  290. ON ERROR GOTO noprint
  291. LPRINT reset$
  292. ON ERROR GOTO 0
  293. topline = 0
  294. submenu = 1
  295. GOSUB OkButton
  296. GOTO BEGIN
  297.  
  298.     CASE 14
  299. topline = 0
  300. submenu = 1
  301. GOSUB OkButton
  302. GOTO BEGIN
  303.  
  304.     CASE 15
  305. topline = 0
  306. submenu = 1
  307. GOSUB OkButton
  308. GOTO BEGIN
  309.  
  310.     CASE 16
  311. topline = 0
  312. submenu = 1
  313. CALL Interrupt(5, regs, regs)
  314. 'below needed only for HPLJ
  315. LPRINT CHR$(12)
  316. GOTO BEGIN
  317.  
  318.     CASE 17
  319. topline = 0
  320. submenu = 1
  321. GOSUB OkButton
  322. GOTO BEGIN
  323.  
  324.     CASE 21
  325. topline = 4
  326. submenu = 7
  327. mmousey = 11
  328. mmousex = 40
  329. GOSUB InputBox
  330. LOCATE 16, 12
  331. PRINT "This interface has intelligence. You supply"
  332. LOCATE 17, 12
  333. PRINT "jump points to the next logical menu item."
  334. LOCATE 18, 12
  335. PRINT "Click [OK] for a demo."
  336. GOSUB OkButton
  337. GOTO BEGIN
  338.  
  339.     CASE 22
  340. topline = 0
  341. submenu = 1
  342. GOSUB InputBox
  343. LOCATE 16, 12
  344. PRINT "Interface Plus can position the mouse cursor anywhere"
  345. LOCATE 17, 12
  346. PRINT "you like. You simply supply screen coordinates. WATCH!"
  347. LOCATE 18, 12
  348. PRINT "Moving mouse cursor to coordinates:"
  349. COLOR fg, bg
  350. MouseOn
  351. FOR x = 15 TO 60
  352.     MoveMouse 15, x
  353.     LOCATE 18, 48
  354.     PRINT 15, x
  355. NEXT
  356. GOSUB OkButton
  357. GOTO BEGIN
  358.  
  359.  
  360.     CASE 23
  361. topline = 0
  362. submenu = 1
  363. GOSUB OkButton
  364. GOTO BEGIN
  365.  
  366.     CASE 24
  367. topline = 0
  368. submenu = 1
  369. GOSUB OkButton
  370. GOTO BEGIN
  371.  
  372.     CASE 25
  373. topline = 0
  374. submenu = 1
  375. GOSUB OkButton
  376. GOTO BEGIN
  377.        
  378.     CASE 26
  379. topline = 0
  380. submenu = 1
  381. GOSUB OkButton
  382. GOTO BEGIN
  383.  
  384.     CASE 27
  385. topline = 0
  386. submenu = 1
  387. GOSUB OkButton
  388. GOTO BEGIN
  389.  
  390.     CASE 31
  391. topline = 0
  392. submenu = 1
  393. GOSUB OkButton
  394. GOTO BEGIN
  395.  
  396.     CASE 32
  397. topline = 0
  398. submenu = 1
  399. GOSUB OkButton
  400. GOTO BEGIN
  401.  
  402.     CASE 33
  403. topline = 0
  404. submenu = 1
  405. GOSUB OkButton
  406. GOTO BEGIN
  407.  
  408.     CASE 34
  409. GOSUB ColorSet
  410. topline = 0
  411. submenu = 1
  412. GOTO BEGIN
  413.  
  414.     CASE 35
  415. topline = 0
  416. submenu = 1
  417. GOSUB OkButton
  418. GOTO BEGIN
  419.  
  420.     CASE 36
  421.  
  422. 'It's up to you to establish the variables you want to save in a file.
  423. 'I like to keep my color data in a separate file. This command should
  424. 'be used to save other setup data.  I suggest a subroutine call here to
  425. 'go to your data saving routine.
  426.  
  427. GOSUB InputBox
  428. LOCATE 16, 12
  429. PRINT "This saves a special configuration. You should test"
  430. LOCATE 17, 12
  431. PRINT "your figures thoroughly before saving."
  432. LOCATE 18, 12
  433. PRINT "Press or click on Y to save....any other to exit"
  434. GOSUB YesNoButton
  435. saveit$ = response$
  436. IF UCASE$(saveit$) = "Y" THEN
  437.     LOCATE 18, 12
  438.     PRINT "File would be saved here"
  439. END IF
  440. topline = 0
  441. submenu = 1
  442. MouseOff
  443. GOTO BEGIN
  444.  
  445.     CASE 37
  446. 'Be sure to choose a new name for config file
  447.            
  448. GOSUB InputBox
  449. LOCATE 16, 12
  450. PRINT "Delete old configuration (Y/N)? ";
  451. LOCATE 16, 12
  452. PRINT "Press or click Y to delete -- any other aborts"
  453. GOSUB YesNoButton
  454. ON ERROR GOTO nofile
  455. IF response$ = "Y" THEN
  456.     kil$ = envpath$ + "IFACE.CFG"
  457.     KILL kil$
  458. END IF
  459.  
  460. finished:
  461. topline = 0
  462. submenu = 1
  463. ON ERROR GOTO 0
  464. MouseOff
  465. GOTO BEGIN
  466.  
  467. nofile:
  468. GOSUB InputBox
  469. LOCATE 16, 12
  470. PRINT "No configuration file found...."
  471. LOCATE 17, 12
  472. PRINT "Click OK or press a key to continue"
  473. GOSUB OkButton
  474. RESUME finished
  475.  
  476.     CASE 41
  477. topline = 0
  478. submenu = 1
  479. GOSUB GetFiles
  480. oky = 20
  481. okx = 75
  482. GOTO BEGIN
  483.  
  484.     CASE 42
  485. topline = 0
  486. submenu = 1
  487. GOSUB ShowStuff
  488. GOTO BEGIN
  489.  
  490.  
  491.     CASE 43
  492. topline = 0
  493. submenu = 1
  494. GOSUB InputBox
  495.  
  496. begincheck:
  497.  
  498. keypress$ = INKEY$
  499. WhatKey keypress$
  500. LOCATE 16, 12
  501. PRINT "This routine identifies special and Function keys"
  502. LOCATE 17, 12
  503. PRINT "You pressed: ";
  504. IF NOT keypress$ = "" THEN PRINT keypress$; "        ";
  505. LOCATE 18, 12
  506. PRINT "Press any key for demo or <Alt>-<F10> to exit"
  507. IF NOT keypress$ = "AF10" THEN GOTO begincheck
  508. GOTO BEGIN
  509.  
  510.     CASE 44
  511. topline = 0
  512. submenu = 1
  513. GOSUB OkButton
  514. GOTO BEGIN
  515.  
  516.     CASE 45
  517. topline = 0
  518. submenu = 1
  519. GOSUB OkButton
  520. GOTO BEGIN
  521.  
  522.     CASE 46
  523. topline = 0
  524. submenu = 1
  525. GOSUB OkButton
  526. GOTO BEGIN
  527.  
  528.     CASE 47
  529. topline = 2
  530. submenu = 1
  531. mmousey = 5
  532. mmousex = 19
  533. GOSUB InputBox
  534. LOCATE 16, 12
  535. PRINT "See...when you finished with one operation, the"
  536. LOCATE 17, 12
  537. PRINT "program took you to the next logical operation."
  538. LOCATE 18, 12
  539. PRINT "Now...click [OK] to go back to the original."
  540. GOSUB OkButton
  541. GOTO BEGIN
  542.  
  543.     CASE 51
  544. topline = 0
  545. submenu = 1
  546. MakeBox "BoxTest", 6, 6, 31, 10, 2, 15, 0, pchar
  547. LOCATE 8, 7
  548. PRINT "These boxes are sizable."
  549. LOCATE 9, 7
  550. PRINT "You control:"
  551. LOCATE 10, 7
  552. PRINT "Size, Position, Borders,"
  553. LOCATE 11, 7
  554. PRINT "Color, and more."
  555. LOCATE 14, 7
  556. PRINT "Click [OK] for more!"
  557. oky = 18
  558. okx = 18
  559. GOSUB MoveOkButton
  560. MakeBox "Another Box", 17, 1, 80, 6, 1, 15, 4, pchar
  561. LOCATE 19, 6
  562. PRINT "You can do just about anything you want"
  563. LOCATE 20, 6
  564. PRINT "With these boxes.  They're a valuable tool"
  565. LOCATE 21, 6
  566. PRINT "For your programs.  It's easy!"
  567. oky = 18
  568. okx = 60
  569. GOSUB MoveOkButton
  570. GOTO BEGIN
  571.  
  572.     CASE 52
  573. GOSUB InputBox
  574. LOCATE 18, 12
  575. IF filechoice$ <> "" THEN
  576. PRINT "Press <Enter> to view: "; filechoice$
  577. LOCATE 17, 12
  578. PRINT "         -or-"
  579. END IF
  580. LOCATE 16, 12
  581. INPUT "Enter a filename to view: ", ViewFile$
  582. IF ViewFile$ = "" THEN ViewFile$ = filechoice$
  583. GOSUB ViewFile
  584. GOSUB InputBox
  585. LOCATE 16, 12
  586. PRINT "The Viewfile routine is one-way, moving down"
  587. LOCATE 17, 12
  588. PRINT "Through the file -- intended for a quick look."
  589. LOCATE 18, 12
  590. PRINT "Filename is stored in viewfile$"
  591. GOSUB OkButton
  592. GOTO BEGIN
  593.  
  594.  
  595.     CASE 53
  596. 'Demo of using the MakeBox routine with text
  597. GOSUB ShareInfo
  598. topline = 0
  599. submenu = 1
  600. GOTO BEGIN
  601.  
  602.     CASE 54
  603. 'DEMO of routine to get system memory
  604.  
  605. topline = 0
  606. submenu = 1
  607. GOSUB MemSize
  608. GOSUB InputBox
  609. LOCATE 16, 12
  610. PRINT "This routine gets total system memory"
  611. LOCATE 18, 12
  612. PRINT "TOTAL MEMORY IS: "; sizeram; "K"
  613. GOSUB OkButton
  614. GOTO BEGIN
  615.  
  616.     CASE 55
  617. 'Demo of moveable Yes/No button
  618. topline = 0
  619. submenu = 1
  620. ynoy = 6
  621. ynox = 34
  622. GOSUB InputBox
  623. LOCATE 17, 12
  624. PRINT "This routine accepts a mouse click or keystroke"
  625. LOCATE 18, 12
  626. PRINT "Button may be placed anywhere on screen."
  627. GOSUB MoveYesNoButton
  628. LOCATE 16, 27
  629. PRINT "Response$ returned: ";
  630. COLOR bg, fg
  631. PRINT " "; response$; " "
  632. COLOR fg, bg
  633. GOSUB OkButton
  634. GOTO BEGIN
  635.  
  636.     CASE 56
  637. '=====Demonstrates call to fixed Y/N button
  638. MouseOff
  639. topline = 0
  640. submenu = 1
  641. GOSUB InputBox
  642. LOCATE 17, 12
  643. PRINT "GOSUB YesNoButton to get a user confirmation"
  644. LOCATE 18, 12
  645. PRINT "Y or N returned in response$ by click or keypress"
  646. GOSUB YesNoButton
  647. LOCATE 16, 30
  648. PRINT "RESPONSE WAS: ";
  649. COLOR bg, fg
  650. PRINT " "; response$; " "
  651. COLOR fg, bg
  652. GOSUB OkButton
  653.            
  654. 'INSERT ACTION HERE. RESPONSE$ CAN BE 'Y' 'N' OR NUL
  655.         GOTO BEGIN
  656.  
  657.     CASE 57
  658. topline = 0
  659. submenu = 1
  660. 'define upper left corner
  661. oky = 10
  662. okx = 20
  663. GOSUB InputBox
  664. LOCATE 16, 12
  665. PRINT "This OK button can be placed anywhere on screen,"
  666. LOCATE 17, 12
  667. PRINT "including inside moveable boxes. RETURN on keypress"
  668. LOCATE 18, 12
  669. PRINT "or mouse click on button."
  670. GOSUB MoveOkButton
  671. GOTO BEGIN
  672.  
  673.  
  674.     CASE 61
  675.  
  676. GOSUB InputBox
  677. LOCATE 16, 12
  678. PRINT "Interface PLUS has a command line parser, which can read"
  679. LOCATE 17, 12
  680. PRINT "3 parameters or you can add more.  Current parameters:"
  681. LOCATE 18, 12
  682. PRINT command1$, command2$, command3$
  683. GOSUB OkButton
  684. topline = 0
  685. submenu = 1
  686. MouseOff
  687. GOTO BEGIN
  688.  
  689.  
  690.     CASE 62
  691.  
  692. readit$ = envpath$ + "IFACE.COM"
  693. COLOR fg, bg
  694. CLS
  695. SHELL readit$
  696. topline = 0
  697. submenu = 1
  698. GOTO BEGIN
  699.  
  700.     CASE 63
  701. topline = 0
  702. submenu = 1
  703. GOSUB OkButton
  704. GOTO BEGIN
  705.  
  706.     CASE 64
  707. topline = 0
  708. submenu = 1
  709. GOSUB OkButton
  710. GOTO BEGIN
  711.  
  712.     CASE 65
  713. topline = 0
  714. submenu = 1
  715. GOSUB OkButton
  716. GOTO BEGIN
  717.  
  718.     CASE 66
  719. topline = 0
  720. submenu = 1
  721. GOSUB OkButton
  722. GOTO BEGIN
  723.  
  724.     CASE 67
  725. topline = 0
  726. submenu = 1
  727. GOSUB OkButton
  728. GOTO BEGIN
  729.         
  730.  
  731.  
  732.     CASE ELSE
  733.  
  734. topline = 0
  735. submenu = 1
  736. GOTO BEGIN
  737.  
  738. END SELECT
  739.  
  740. 'PLACE ALL GOSUB SUBROUTINES BELOW THIS LINE!
  741. '============================================================
  742.  
  743. DriveTest:
  744.  
  745. '===== Checks for available disk drives
  746. ON ERROR GOTO driverror
  747.  
  748. atest:
  749. flag = 0
  750. OPEN "A:~test~.tst" FOR OUTPUT AS #1
  751. IF flag = 1 THEN GOTO btest
  752. drive$(1) = "Y"
  753. CLOSE #1
  754. KILL "a:~test~.tst"
  755.  
  756. btest:
  757. flag = 0
  758. OPEN "B:~test~.tst" FOR OUTPUT AS #1
  759. IF flag = 1 THEN GOTO ctest
  760. drive$(2) = "Y"
  761. CLOSE #1
  762. KILL "B:~test~.tst"
  763.  
  764. ctest:
  765. flag = 0
  766. OPEN "C:~test~.tst" FOR OUTPUT AS #1
  767. IF flag = 1 THEN GOTO dtest
  768. drive$(3) = "Y"
  769. CLOSE #1
  770. KILL "C:~test~.tst"
  771.  
  772. dtest:
  773. flag = 0
  774. OPEN "D:~test~.tst" FOR OUTPUT AS #1
  775. IF flag = 1 THEN GOTO etest
  776. drive$(4) = "Y"
  777. CLOSE #1
  778. KILL "D:~test~.tst"
  779.  
  780. etest:
  781. flag = 0
  782. OPEN "E:~test~.tst" FOR OUTPUT AS #1
  783. IF flag = 1 THEN GOTO ftest
  784. drive$(5) = "Y"
  785. CLOSE #1
  786. KILL "E:~test~.tst"
  787.  
  788. ftest:
  789. flag = 0
  790. OPEN "f:~test~.tst" FOR OUTPUT AS #1
  791. IF flag = 1 THEN GOTO gtest
  792. drive$(6) = "Y"
  793. CLOSE #1
  794. KILL "f:~test~.tst"
  795.  
  796. gtest:
  797. flag = 0
  798. OPEN "g:~test~.tst" FOR OUTPUT AS #1
  799. IF flag = 1 THEN GOTO htest
  800. drive$(7) = "Y"
  801. CLOSE #1
  802. KILL "f:~test~.tst"
  803.  
  804. htest:
  805. flag = 0
  806. OPEN "h:~test~.tst" FOR OUTPUT AS #1
  807. IF NOT flag = 1 THEN
  808.     drive$(8) = "Y"
  809. END IF
  810. CLOSE #1
  811. KILL "f:~test~.tst"
  812.  
  813. RETURN
  814.  
  815. driverror:
  816. flag = 1
  817. RESUME NEXT
  818.  
  819. ParseCommandLine:
  820.  
  821. '===== You can add additional parameters by simply copying the
  822. '===== IF...END IF blocks, changing the variables.
  823.  
  824. command1$ = LEFT$(COMMAND$, INSTR(COMMAND$, " "))
  825. IF INSTR(COMMAND$, " ") = 0 THEN
  826. command1$ = COMMAND$
  827.     RETURN
  828. END IF
  829. remainder$ = MID$(COMMAND$, (INSTR(COMMAND$, " ") + 1))
  830. command2$ = LEFT$(remainder$, INSTR(remainder$, " "))
  831. IF INSTR(remainder$, " ") = 0 THEN
  832.     command2$ = remainder$
  833.     RETURN
  834. END IF
  835. remainder$ = MID$(remainder$, (INSTR(remainder$, " ") + 1))
  836. command3$ = LEFT$(remainder$, INSTR(remainder$, " "))
  837. IF INSTR(remainder$, " ") = 0 THEN
  838.     command3$ = remainder$
  839.     RETURN
  840. END IF
  841. RETURN
  842.  
  843.  
  844.  
  845. GetMask:
  846.  
  847. '=====Since the INTERRUPT call here is version specific, you must
  848. '=====keep the DOS 2.x stuff in here.
  849.            
  850. GOSUB InputBox
  851. IF version > 2 THEN
  852.     COLOR fg, bg
  853.     LOCATE 18, 12
  854.     PRINT "Use normal DOS wildcards (? and *)..."
  855.     LOCATE 17, 12
  856.     PRINT "Press <Enter> for *.* default."
  857.     LOCATE 16, 12
  858.     INPUT ; "Enter new file mask: ", newmask$
  859. END IF
  860. IF version < 3 THEN
  861.     COLOR fg, bg
  862.     LOCATE 18, 12
  863.     PRINT "Use only the '?' wildcard for DOS 2.x"
  864.     LOCATE 17, 12
  865.     PRINT "Press <Enter> for ????????.??? default"
  866.     LOCATE 16, 12
  867.     INPUT ; "Enter new file mask: ", newmask$
  868.     IF INSTR(newmask$, "*") THEN GOTO GetMask
  869. END IF
  870. RETURN
  871.  
  872.  
  873. GetDir:
  874. newdir$ = ""
  875. GOSUB InputBox
  876. ON ERROR GOTO direrr
  877. COLOR fg, bg
  878. LOCATE 18, 12
  879. PRINT "Include drive information if needed..."
  880. LOCATE 17, 12
  881. PRINT "Press <Enter> for "; originaldir$
  882. LOCATE 16, 12
  883. INPUT ; "Enter new directory: ", newdir$
  884. newdir$ = UCASE$(newdir$)
  885. IF newdir$ = "" THEN
  886.     newdir$ = olddir$
  887.     GOTO BEGIN
  888. END IF
  889. IF NOT LEN(newdir$) = 3 THEN
  890.     IF RIGHT$(newdir$, 1) = "\" THEN
  891.         newdir$ = LEFT$(newdir$, (LEN(newdir$) - 1))
  892.     END IF
  893. END IF
  894. CHDIR newdir$
  895. ON ERROR GOTO 0
  896. RETURN
  897.  
  898. direrr:
  899. LOCATE 17, 12
  900. SOUND 1000, 1
  901. PRINT "Invalid directory....press a key";
  902. a$ = INPUT$(1)
  903. newdir$ = ""
  904. RESUME GetDir
  905.  
  906. ShellOut:
  907.  
  908. COLOR fg, bg
  909. GOSUB InputBox
  910. LOCATE 17, 12
  911. PRINT "Enter a DOS command or press Enter for DOS prompt."
  912. LOCATE 18, 12
  913. PRINT "Enter EXIT to return to program."
  914. LOCATE 16, 12
  915. INPUT "Command to Execute: ", doscmd$
  916. IF UCASE$(doscmd$) = "EXIT" THEN RETURN
  917. CLS
  918. LOCATE 1, 1
  919. PRINT "Enter Exit to return to Interface Plus"
  920. SHELL doscmd$
  921. oky = 21
  922. okx = 75
  923. GOSUB MoveOkButton
  924. RETURN
  925.  
  926. YesNoButton:
  927. response$ = ""
  928. isbutton$ = ""
  929. COLOR fg, bg
  930. LOCATE 15, 69
  931. PRINT "╦═══╗";
  932. LOCATE 16, 70
  933. COLOR bg, fg
  934. PRINT "YES";
  935. COLOR fg, bg
  936. PRINT "║";
  937. LOCATE 17, 69
  938. PRINT "╠═══╣";
  939. LOCATE 18, 70
  940. COLOR bg, fg
  941. PRINT " NO";
  942. COLOR fg, bg
  943. PRINT "║";
  944. LOCATE 19, 69
  945. PRINT "╩═══╝";
  946. MoveMouse 16, 70
  947. WHILE NOT isbutton$ = "DOWN"
  948. response$ = UCASE$(INKEY$)
  949. IF response$ <> "" THEN RETURN
  950. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  951. WEND
  952.  
  953. IF mousex = 69 OR mousex = 70 OR mousex = 71 THEN
  954.     IF mousey = 15 THEN
  955.         response$ = "Y"
  956.         CALL WaitaBit(.15)
  957.         isbutton$ = ""
  958.         RETURN
  959.     ELSEIF mousey = 17 THEN
  960.         response$ = "N"
  961.         CALL WaitaBit(.15)
  962.         isbutton$ = ""
  963.         RETURN
  964.     ELSE
  965.         response$ = ""
  966.         GOTO YesNoButton
  967.     END IF
  968.  
  969. END IF
  970. isbutton$ = ""
  971. IF response$ = "" THEN GOTO YesNoButton
  972. RETURN
  973.  
  974.  
  975. MoveYesNoButton:
  976. response$ = ""
  977. isbutton$ = ""
  978. COLOR fg, bg
  979. LOCATE ynoy, ynox
  980. PRINT "╔═══╗";
  981. LOCATE ynoy + 1, ynox
  982. PRINT "║";
  983. COLOR bg, fg
  984. PRINT "YES";
  985. COLOR fg, bg
  986. PRINT "║";
  987. LOCATE ynoy + 2, ynox
  988. PRINT "╠═══╣";
  989. LOCATE ynoy + 3, ynox
  990. PRINT "║";
  991. COLOR bg, fg
  992. PRINT " NO";
  993. COLOR fg, bg
  994. PRINT "║";
  995. LOCATE ynoy + 4, ynox
  996. PRINT "╚═══╝";
  997. MoveMouse ynoy + 1, ynox + 1
  998. REM mouseon
  999. WHILE NOT isbutton$ = "DOWN"
  1000. response$ = UCASE$(INKEY$)
  1001. IF response$ <> "" THEN RETURN
  1002. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1003. WEND
  1004.  
  1005. IF mousex = ynox OR mousex = ynox + 1 OR mousex = ynox + 2 THEN
  1006.     IF mousey = ynoy THEN
  1007.         response$ = "Y"
  1008.         CALL WaitaBit(.15)
  1009.         RETURN
  1010.     ELSEIF mousey = ynoy + 2 THEN
  1011.         response$ = "N"
  1012.         CALL WaitaBit(.15)
  1013.         RETURN
  1014.     ELSE
  1015.         response$ = ""
  1016.         GOTO MoveYesNoButton
  1017.     END IF
  1018.  
  1019. END IF
  1020. isbutton$ = ""
  1021. IF response$ = "" THEN GOTO MoveYesNoButton
  1022. RETURN
  1023.  
  1024. MoveOkButton:
  1025. response$ = ""
  1026. OK$ = ""
  1027. COLOR fg, bg
  1028. LOCATE oky, okx
  1029. PRINT "╔════╗";
  1030. LOCATE oky + 1, okx
  1031. PRINT "║";
  1032. COLOR bg, fg
  1033. PRINT " OK ";
  1034. COLOR fg, bg
  1035. PRINT "║";
  1036. LOCATE oky + 2, okx
  1037. PRINT "╚════╝";
  1038. MoveMouse oky + 1, okx + 1
  1039. REM mouseon
  1040. WHILE NOT isbutton$ = "DOWN"
  1041. OK$ = INKEY$
  1042. IF OK$ <> "" THEN
  1043.     MouseOff
  1044.     CALL WaitaBit(.15)
  1045.     RETURN
  1046. END IF
  1047. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1048. WEND
  1049. IF mousey = oky THEN
  1050.     IF mousex = okx OR mousex = okx + 1 OR mousex = okx + 2 OR mousex = okx + 3 THEN
  1051.         MouseOff
  1052.         CALL WaitaBit(.15)
  1053.         RETURN
  1054.     END IF
  1055. END IF
  1056. isbutton$ = ""
  1057. GOTO MoveOkButton
  1058. MouseOff
  1059. CALL WaitaBit(.15)
  1060. RETURN
  1061.  
  1062. OkButton:
  1063. response$ = ""
  1064. OK$ = ""
  1065. COLOR fg, bg
  1066. LOCATE 15, 69
  1067. PRINT "╦════╗";
  1068. LOCATE 16, 70
  1069. COLOR bg, fg
  1070. PRINT "    ";
  1071. COLOR fg, bg
  1072. PRINT "║";
  1073. LOCATE 17, 69
  1074. PRINT "║";
  1075. COLOR bg, fg
  1076. PRINT " OK ";
  1077. COLOR fg, bg
  1078. PRINT "║";
  1079. LOCATE 18, 70
  1080. COLOR bg, fg
  1081. PRINT "    ";
  1082. COLOR fg, bg
  1083. PRINT "║";
  1084. LOCATE 19, 69
  1085. PRINT "╩════╝";
  1086. MoveMouse 16, 70
  1087. WHILE NOT isbutton$ = "DOWN"
  1088. OK$ = INKEY$
  1089. IF OK$ <> "" THEN
  1090.     MouseOff
  1091.     CALL WaitaBit(.15)
  1092.     RETURN
  1093. END IF
  1094. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1095. WEND
  1096. IF mousey = 15 OR mousey = 16 OR mousey = 17 THEN
  1097.     IF mousex = 69 OR mousex = 70 OR mousex = 71 OR mousex = 72 THEN
  1098.         MouseOff
  1099.         CALL WaitaBit(.15)
  1100.         RETURN
  1101.     END IF
  1102. END IF
  1103. isbutton$ = ""
  1104. GOTO OkButton
  1105. MouseOff
  1106. CALL WaitaBit(.15)
  1107. RETURN
  1108.  
  1109. InputBox:
  1110.  
  1111. 'Draws box on screen for input or messages
  1112.  
  1113. COLOR fg, bg
  1114. LOCATE 15, 10
  1115. PRINT "╔";
  1116. FOR topx = 1 TO 58
  1117. PRINT "═";
  1118. NEXT topx
  1119. PRINT "╗"
  1120. LOCATE 16, 10: PRINT "║"; SPACE$(58); "║"
  1121. LOCATE 17, 10: PRINT "║"; SPACE$(58); "║"
  1122. LOCATE 18, 10: PRINT "║"; SPACE$(58); "║"
  1123. LOCATE 19, 10
  1124. PRINT "╚";
  1125. FOR bottomx = 1 TO 58
  1126. PRINT "═";
  1127. NEXT bottomx
  1128. PRINT "╝";
  1129. RETURN
  1130.  
  1131.  
  1132.  
  1133. GetFiles:
  1134.  
  1135. fileflag = 0
  1136. COLOR fg, bg
  1137. memdta$ = SPACE$(43)
  1138. IF RIGHT$(newdir$, 1) <> "\" THEN filespec$ = newdir$ + "\" + mask$
  1139. IF RIGHT$(newdir$, 1) = "\" THEN filespec$ = newdir$ + mask$
  1140. CALL SetMemDta(memdta$)
  1141. CALL FirstFile(filespec$, filename$)
  1142. title$ = "File Listing for " + UCASE$(filespec$)
  1143. MakeBox title$, 4, 1, 82, 22, 4, fg, bg, pchar
  1144. VIEW PRINT 6 TO 23
  1145.  
  1146. LOCATE 6, 1
  1147. filecount = 1
  1148. IF filename$ <> "" THEN
  1149.     PRINT filename$,
  1150.     DO
  1151.         CALL NextFile(filename$)
  1152.         IF filename$ <> "" THEN
  1153.             PRINT filename$,
  1154.             filecount = filecount + 1
  1155.         END IF
  1156.         IF filecount = 75 THEN
  1157.         IF chooseone$ = "Y" THEN
  1158.             LOCATE 21, 45
  1159.             COLOR bg, fg
  1160.             PRINT "MORE -- Choose a file here?";
  1161.             COLOR fg, bg
  1162.             ynoy = 18
  1163.             ynox = 75
  1164.             GOSUB MoveYesNoButton
  1165.             IF response$ = "Y" THEN
  1166.                 MouseOff
  1167.                 FOR x = 18 TO 22
  1168.                 LOCATE x, 75
  1169.                 PRINT "     ";
  1170.                 NEXT x
  1171.                 LOCATE 21, 45
  1172.                 PRINT SPACE$(30);
  1173.                 MouseOn
  1174.                 filecount = 1
  1175.                 skipok = 1
  1176.                 GOSUB ChooseFile
  1177.             ELSE
  1178.                 MouseOff
  1179.                 FOR x = 18 TO 22
  1180.                 LOCATE x, 75
  1181.                 PRINT "     ";
  1182.                 NEXT x
  1183.                 LOCATE 21, 45
  1184.                 PRINT SPACE$(30);
  1185.                 filecount = 75
  1186.  
  1187.             END IF
  1188.         END IF
  1189.         GOSUB GetMoreFiles
  1190.             IF response$ <> "Y" THEN
  1191.             MouseOff
  1192.             filename$ = ""
  1193.             END IF
  1194.         END IF
  1195.     LOOP UNTIL filename$ = ""
  1196. ELSE
  1197.     PRINT "no files match"
  1198. END IF
  1199. IF chooseone$ = "Y" THEN
  1200.     skipok = 1
  1201.     GOSUB ChooseFile
  1202. END IF
  1203. MouseOff
  1204. IF NOT skipok = 1 THEN
  1205.     LOCATE 21, 54
  1206.     COLOR bg, fg
  1207.     oky = 20
  1208.     okx = 75
  1209.     PRINT "Return to main menu.";
  1210.     COLOR fg, bg
  1211.     MouseOn
  1212.     GOSUB MoveOkButton
  1213. END IF
  1214. MouseOff
  1215. response$ = ""
  1216. isbutton$ = ""
  1217. VIEW PRINT 1 TO 25
  1218. skipok = 0
  1219. RETURN
  1220.  
  1221. GetMoreFiles:
  1222. IF fileflag = 1 THEN RETURN
  1223. LOCATE 21, 55
  1224. COLOR bg, fg
  1225. PRINT "Look at more files?";
  1226. COLOR fg, bg
  1227. ynoy = 18
  1228. ynox = 75
  1229. GOSUB MoveYesNoButton
  1230. IF response$ = "Y" THEN
  1231.     MouseOff
  1232.     FOR x = 18 TO 22
  1233.     LOCATE x, 75
  1234.     PRINT "     ";
  1235.     NEXT x
  1236.     LOCATE 21, 55
  1237.     PRINT "                    "
  1238.     CLS
  1239.     MouseOn
  1240.     filecount = 1
  1241. ELSE
  1242.     chooseone$ = ""
  1243.     MouseOff
  1244.     FOR x = 18 TO 22
  1245.     LOCATE x, 75
  1246.     PRINT "     ";
  1247.     NEXT x
  1248.     LOCATE 21, 30
  1249.     PRINT SPACE$(48);
  1250.     filecount = 75
  1251.     response$ = ""
  1252.     MouseOn
  1253. END IF
  1254. RETURN
  1255.  
  1256. ChooseFile:
  1257. outofrange = 0
  1258. ON ERROR GOTO 0
  1259. IF mouse$ = "YES" THEN
  1260. LOCATE 23, 37
  1261. COLOR bg, fg
  1262. PRINT " CANCEL ";
  1263. LOCATE 25, 1
  1264. COLOR bg, fg
  1265. PRINT SPACE$(80);
  1266. LOCATE 25, 1
  1267. PRINT "Click on your choice...Press any key to enter file manually";
  1268. COLOR fg, bg
  1269. filechoice$ = ""
  1270. isbutton$ = ""
  1271. bldfile$ = ""
  1272. fileflag = 0
  1273. pressed = 0
  1274. WHILE isbutton$ <> "DOWN"
  1275.     IF INKEY$ <> "" THEN
  1276.         pressed = 1
  1277.         GOSUB manual
  1278.         RETURN
  1279.     END IF
  1280.     CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1281. WEND
  1282. IF mousey < 5 OR mousey > 21 THEN outofrange = 1
  1283. mousex = mousex + 1
  1284.     IF mousex >= 1 AND mousex <= 12 AND outofrange = 0 THEN
  1285.         isbutton$ = ""
  1286.         LOCATE mousey + 1, 1
  1287.         FOR x = 1 TO 12
  1288.         partfile = SCREEN(mousey + 1, x)
  1289.         bldfile$ = bldfile$ + CHR$(partfile)
  1290.         NEXT
  1291.         LOCATE mousey + 1, 1
  1292.         COLOR bg, fg
  1293.         MouseOff
  1294.         PRINT RTRIM$(bldfile$)
  1295.         filechoice$ = RTRIM$(bldfile$)
  1296.         fileflag = 1
  1297.         oldy = mousey + 1
  1298.         oldx = 1
  1299.     ELSEIF mousex >= 15 AND mousex <= 26 AND outofrange = 0 THEN
  1300.         isbutton$ = ""
  1301.         LOCATE mousey + 1, 15
  1302.         FOR x = 15 TO 26
  1303.         partfile = SCREEN(mousey + 1, x)
  1304.         bldfile$ = bldfile$ + CHR$(partfile)
  1305.         NEXT
  1306.         LOCATE mousey + 1, 15
  1307.         COLOR bg, fg
  1308.         MouseOff
  1309.         PRINT RTRIM$(bldfile$)
  1310.         filechoice$ = RTRIM$(bldfile$)
  1311.         fileflag = 1
  1312.         oldy = mousey + 1
  1313.         oldx = 15
  1314.     ELSEIF mousex >= 29 AND mousex <= 40 AND outofrange = 0 THEN
  1315.         isbutton$ = ""
  1316.         LOCATE mousey + 1, 29
  1317.         FOR x = 29 TO 40
  1318.         partfile = SCREEN(mousey + 1, x)
  1319.         bldfile$ = bldfile$ + CHR$(partfile)
  1320.         NEXT
  1321.         LOCATE mousey + 1, 29
  1322.         COLOR bg, fg
  1323.         MouseOff
  1324.         PRINT RTRIM$(bldfile$)
  1325.         filechoice$ = RTRIM$(bldfile$)
  1326.         fileflag = 1
  1327.         oldy = mousey + 1
  1328.         oldx = 29
  1329.     ELSEIF mousex >= 43 AND mousex <= 54 AND outofrange = 0 THEN
  1330.         isbutton$ = ""
  1331.         LOCATE mousey + 1, 43
  1332.         FOR x = 43 TO 54
  1333.         partfile = SCREEN(mousey + 1, x)
  1334.         bldfile$ = bldfile$ + CHR$(partfile)
  1335.         NEXT
  1336.         LOCATE mousey + 1, 43
  1337.         COLOR bg, fg
  1338.         MouseOff
  1339.         PRINT RTRIM$(bldfile$)
  1340.         filechoice$ = RTRIM$(bldfile$)
  1341.         fileflag = 1
  1342.         oldy = mousey + 1
  1343.         oldx = 43
  1344.     ELSEIF mousex >= 57 AND mousex <= 68 AND outofrange = 0 THEN
  1345.         isbutton$ = ""
  1346.         LOCATE mousey + 1, 57
  1347.         FOR x = 57 TO 68
  1348.         partfile = SCREEN(mousey + 1, x)
  1349.         bldfile$ = bldfile$ + CHR$(partfile)
  1350.         NEXT
  1351.         LOCATE mousey + 1, 57
  1352.         COLOR bg, fg
  1353.         MouseOff
  1354.         PRINT RTRIM$(bldfile$)
  1355.         filechoice$ = RTRIM$(bldfile$)
  1356.         fileflag = 1
  1357.         oldy = mousey + 1
  1358.         oldx = 57
  1359.  
  1360.     ELSE
  1361.         filechoice$ = ""
  1362. END IF
  1363. IF RIGHT$(newdir$, 1) <> "\" THEN filechoice$ = newdir$ + "\" + filechoice$
  1364. IF RIGHT$(newdir$, 1) = "\" THEN filechoice$ = newdir$ + filechoice$
  1365. IF RTRIM$(bldfile$) = "" THEN filechoice$ = ""
  1366. END IF
  1367.  
  1368. nomouse:
  1369. IF mouse$ <> "YES" THEN
  1370. pressed = 1
  1371. manual:
  1372.     filechoice$ = ""
  1373.     ON ERROR GOTO 0
  1374.     LOCATE 22, 35
  1375.     INPUT ; "Enter the filename: ", filechoice$
  1376.     IF filechoice$ <> "" THEN
  1377.         IF RIGHT$(newdir$, 1) <> "\" THEN
  1378.             filechoice$ = newdir$ + "\" + UCASE$(filechoice$)
  1379.         END IF
  1380.         IF RIGHT$(newdir$, 1) = "\" THEN
  1381.             filechoice$ = newdir$ + filechoice$
  1382.         END IF
  1383.     
  1384.     filechoice$ = UCASE$(filechoice$)
  1385.     ON ERROR GOTO wrongfile
  1386.     OPEN filechoice$ FOR INPUT AS #7
  1387.     CLOSE #7
  1388.     LOCATE 22, 35
  1389.     PRINT SPACE$(44);
  1390.     fileflag = 1
  1391.     END IF
  1392. END IF
  1393.  
  1394. checkchoice:
  1395. chooseone$ = ""
  1396. ynoy = 18
  1397. ynox = 75
  1398. LOCATE 21, 55 - LEN(filechoice$)
  1399. IF filechoice$ = "" THEN
  1400.     PRINT " No File, Correct? "
  1401. ELSE
  1402.     PRINT " "; filechoice$; ", Correct? "
  1403. END IF
  1404. GOSUB MoveYesNoButton
  1405. IF response$ <> "N" THEN
  1406.     MouseOff
  1407.     FOR y = 18 TO 22
  1408.     LOCATE y, 75
  1409.     PRINT "     "
  1410.     NEXT y
  1411.     LOCATE 21, 30
  1412.     COLOR fg, bg
  1413.     PRINT SPACE$(48);
  1414.     response$ = ""
  1415.     RETURN
  1416. END IF
  1417. IF response$ = "N" THEN
  1418.     IF mouse$ = "YES" AND pressed = 0 THEN
  1419.         MouseOff
  1420.         FOR y = 18 TO 22
  1421.             LOCATE y, 75
  1422.             PRINT "     "
  1423.         NEXT
  1424.         LOCATE 21, 20
  1425.         COLOR fg, bg
  1426.         PRINT SPACE$(58);
  1427.         response$ = ""
  1428.         IF oldy < 6 THEN oldy = 6
  1429.         IF oldy > 23 THEN oldy = 23
  1430.         LOCATE oldy, oldx
  1431.         PRINT RTRIM$(bldfile$);
  1432.     MoveMouse oldy, oldx
  1433.     ELSE
  1434.         MouseOff
  1435.         FOR y = 18 TO 22
  1436.             LOCATE y, 75
  1437.             PRINT "     "
  1438.         NEXT
  1439.         LOCATE 21, 20
  1440.         COLOR fg, bg
  1441.         PRINT SPACE$(58);
  1442.         response$ = ""
  1443.     END IF
  1444.        GOTO ChooseFile
  1445. END IF
  1446.  
  1447. wrongfile:
  1448. SOUND 1000, 1
  1449. LOCATE 22, 35
  1450. PRINT SPACE$(40);
  1451. LOCATE 22, 35
  1452. PRINT "INVALID FILENAME -- Try again"
  1453. WaitaBit 2
  1454. LOCATE 22, 35
  1455. PRINT SPACE$(40);
  1456. RESUME ChooseFile
  1457.  
  1458.  
  1459. ViewFile:
  1460.  
  1461. IF ViewFile$ = "" THEN RETURN
  1462. LOCATE 4, 1
  1463. PRINT STRING$(80, CHR$(pchar));
  1464. viewing$ = "Viewing: " + ViewFile$
  1465. LOCATE 4, (80 - LEN(viewing$)) / 2
  1466. COLOR bg, fg
  1467. PRINT viewing$;
  1468. COLOR fg, bg
  1469. VIEW PRINT 5 TO 25
  1470. CLS
  1471. ON ERROR GOTO viewerror
  1472. IF MID$(ViewFile$, 2, 1) = ":" THEN
  1473.     ViewFile$ = ViewFile$
  1474. ELSEIF LEFT$(ViewFile$, 1) = "\" THEN
  1475.     ViewFile$ = ViewFile$
  1476. ELSE
  1477.     ViewFile$ = newdir$ + "\" + ViewFile$
  1478. END IF
  1479. viewit = FREEFILE
  1480. OPEN ViewFile$ FOR INPUT AS #viewit
  1481. moreread:
  1482. FOR lineread = 1 TO 18
  1483.     IF EOF(viewit) THEN
  1484.         LOCATE 24, 26
  1485.         SOUND 1000, 1
  1486.         COLOR bg, fg
  1487.         PRINT "END OF FILE!  Press <Esc>...";
  1488.         COLOR fg, bg
  1489.         EXIT FOR
  1490.     END IF
  1491.     LINE INPUT #viewit, view$
  1492.     PRINT view$
  1493. NEXT lineread
  1494. LOCATE 25, 1
  1495. COLOR 15, fg
  1496. PRINT SPACE$(80);
  1497. LOCATE 25, 1
  1498. PRINT "Viewing "; UCASE$(ViewFile$); ".  Any key for more or <Esc> for menu.";
  1499. COLOR fg, bg
  1500. continue$ = INPUT$(1)
  1501. CLS
  1502. IF continue$ = CHR$(27) THEN
  1503.     ON ERROR GOTO 0
  1504.     CLOSE #viewit
  1505.     VIEW PRINT 1 TO 25
  1506.     RETURN
  1507. END IF
  1508. continue$ = ""
  1509. CALL WaitaBit(.15)
  1510. GOTO moreread
  1511.  
  1512. goback:
  1513. ON ERROR GOTO 0
  1514. CLOSE #viewit
  1515. VIEW PRINT 1 TO 25
  1516. RETURN
  1517.  
  1518. viewerror:
  1519. LOCATE 25, 1
  1520. COLOR 15, fg
  1521. SOUND 1000, 1
  1522. PRINT SPACE$(80);
  1523. LOCATE 25, 20
  1524. PRINT "Invalid file name --- Press a key";
  1525. COLOR fg, bg
  1526. RESUME goback
  1527.  
  1528. GetError:
  1529. '===== Non-specific error handler. You can use this one to handle
  1530. '===== user errors by coping with the problem in the line after the
  1531. '===== potential error. IF generrorflag = 1 THEN.......
  1532. generrorflag = 1
  1533. RESUME NEXT
  1534.  
  1535.  
  1536. GetEnvir:
  1537.  
  1538. 'Get data from system environment.
  1539. 'This sample gets the variable envpath$ from the enviroment.
  1540. 'If no environment variable exists, the value is the nul string.
  1541. 'You can add other variables if you wish.
  1542.  
  1543. IF ENVIRON$("IFACE") = "" THEN
  1544.     envpath$ = ""
  1545.     RETURN
  1546. END IF
  1547. envpath$ = ENVIRON$("IFACE")
  1548. IF NOT RIGHT$(envpath$, 1) = "\" THEN
  1549.     envpath$ = envpath$ + "\"
  1550. END IF
  1551. RETURN
  1552.  
  1553.  
  1554. ColorInit:
  1555.  
  1556. 'Gets color information from data file
  1557.  
  1558. fg = 7
  1559. bg = 0
  1560. ON ERROR GOTO 433
  1561. colorfile$ = envpath$ + "MCOLOR.DAT"
  1562. OPEN colorfile$ FOR INPUT AS #4
  1563. INPUT #4, fg
  1564. INPUT #4, bg
  1565. INPUT #4, pchar
  1566. CLOSE #4
  1567. COLOR fg, bg
  1568. CLS
  1569. 434 ON ERROR GOTO 0: RETURN
  1570. 433 RESUME 434
  1571.  
  1572.  
  1573. quit:
  1574. MouseOff
  1575. GOSUB ShareInfo
  1576. CHDIR olddir$
  1577. CLS
  1578. COLOR fg, bg
  1579. END
  1580. RETURN
  1581.  
  1582.  
  1583.  
  1584. noprint:
  1585. GOSUB InputBox
  1586. LOCATE 16, 12
  1587. SOUND 1000, 1
  1588. PRINT "TURN YOUR PRINTER ON OR CORRECT OTHER PRINTER PROBLEM!";
  1589. LOCATE 18, 12
  1590. PRINT "PRESS ANY KEY TO CONTINUE."
  1591. WHILE INKEY$ = "": WEND
  1592. RESUME NEXT
  1593.  
  1594.  
  1595. ColorSet:
  1596. isbutton$ = ""
  1597. CALL WaitaBit(.15)
  1598. MouseOff
  1599. 10000 COLOR 7, 0: CLS
  1600. COLOR 7, 0: PRINT : PRINT
  1601. PRINT "    [ 0 ] "; : COLOR 0, 7: PRINT "BLACK";
  1602. COLOR 7, 0: PRINT "                  Foreground Colors"
  1603. PRINT
  1604.  
  1605. FOR c = 1 TO 5
  1606.     COLOR c, 0: PRINT "    ["; c; "] █████";
  1607. NEXT
  1608. PRINT : PRINT
  1609.  
  1610. FOR c = 6 TO 9
  1611.     COLOR c, 0: PRINT "    ["; c; "] █████";
  1612. NEXT
  1613. COLOR 10, 0: PRINT "    [10 ] █████"
  1614. PRINT
  1615.  
  1616. FOR c = 11 TO 15
  1617.     COLOR c, 0: PRINT "   ["; c; "] █████";
  1618. NEXT
  1619. PRINT : COLOR 7, 0
  1620.  
  1621. PRINT
  1622. PRINT " [ 0 ]"; : COLOR 0, 7: PRINT "BLACK";
  1623. COLOR 7, 0
  1624. PRINT "                Background Colors"
  1625. PRINT
  1626.  
  1627. FOR c = 1 TO 7
  1628.     COLOR c, 0: PRINT " ["; c; "]█████";
  1629. NEXT
  1630. PRINT : PRINT
  1631. COLOR 7, 0
  1632.  
  1633. 'routine to pick foreground color
  1634.  
  1635. IF mouse$ <> "YES" THEN
  1636.     GOSUB InputBox
  1637.     IF scrtype$ = "MONO" THEN
  1638.         LOCATE 18, 12
  1639.         PRINT "MONOCHROME -- Choose 7 or 0 only."
  1640.     END IF
  1641.     LOCATE 16, 12
  1642.     INPUT "Enter the number for the foreground color (0-15):", fg
  1643. END IF
  1644. IF mouse$ = "YES" THEN
  1645.     GOSUB InputBox
  1646.     LOCATE 16, 12
  1647.     PRINT "Click on your choice of foreground colors"
  1648.     IF scrtype$ = "MONO" THEN
  1649.         LOCATE 18, 12
  1650.         PRINT "MONOCHROME -- Choose 7 (white) or 0 (black) only."
  1651.     END IF
  1652.     DO
  1653.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1654.     LOOP UNTIL isbutton$ = "DOWN"
  1655.     raw = SCREEN(mousey + 1, mousex + 1, 1)
  1656.     GOSUB figurecolor
  1657.     fg = fixed
  1658.     fixed = 0
  1659.     MouseOff
  1660.     CALL WaitaBit(.15)
  1661.     
  1662. END IF
  1663. IF fg = 0 THEN bg = 7
  1664. isbutton$ = "UP"
  1665.  
  1666. 'routine to pick background color
  1667.  
  1668. IF mouse$ <> "YES" THEN
  1669.     GOSUB InputBox
  1670.     LOCATE 18, 12
  1671.     PRINT "MONOCHROME -- Choose 7 or 0 only"
  1672.     LOCATE 16, 12
  1673.     INPUT "Enter the number for the background color (0-7):", bg
  1674. END IF
  1675. IF mouse$ = "YES" THEN
  1676.     GOSUB InputBox
  1677.     LOCATE 16, 12
  1678.     PRINT "Click on your choice of background colors"
  1679.     LOCATE 18, 12
  1680.     PRINT "MONOCHROME -- Choose 7(white) or 0(black) only."
  1681.     MouseOn
  1682.     DO
  1683.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1684.     LOOP UNTIL isbutton$ = "DOWN"
  1685.     raw = SCREEN(mousey + 1, mousex + 1, 1)
  1686.     GOSUB figurecolor
  1687.     bg = fixed
  1688.     fixed = 0
  1689.     MouseOff
  1690.     CALL WaitaBit(.15)
  1691. END IF
  1692. isbutton$ = "UP"
  1693. IF fg = bg THEN
  1694.     fg = 7
  1695.     bg = 0
  1696.     GOTO ColorSet
  1697. END IF
  1698. GOSUB InputBox
  1699. LOCATE 16, 30
  1700. COLOR fg, bg
  1701. PRINT "NORMAL    ";
  1702. COLOR bg, fg
  1703. PRINT "REVERSED";
  1704. IF mouse$ <> "YES" THEN
  1705.     LOCATE 18, 24: COLOR fg, bg
  1706.     INPUT "This is your choice. OK? (Y/N): ", ans$
  1707. END IF
  1708. IF mouse$ = "YES" THEN
  1709.     LOCATE 18, 28
  1710.     COLOR fg, bg
  1711.     PRINT "This is your choice. OK?"
  1712.     GOSUB YesNoButton
  1713.     ans$ = LEFT$(response$, 1)
  1714.     response$ = ""
  1715.     MouseOff
  1716.     CALL WaitaBit(.15)
  1717. END IF
  1718. IF UCASE$(ans$) = "N" THEN
  1719.     fg = 7
  1720.     bg = 0
  1721.     GOTO ColorSet
  1722. END IF
  1723.  
  1724. 'Routine to pick background paint character
  1725.  
  1726. COLOR fg, bg
  1727. CLS
  1728. 'display background paint characters
  1729.  
  1730. LOCATE 4, 21
  1731. PRINT "BACKGROUND CHARACTERS FOR MENU SCREEN"
  1732. LOCATE 7, 1
  1733. PRINT "                0             1            2            3"
  1734. PRINT
  1735. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1736. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1737. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1738. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1739. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1740.  
  1741. backchar:
  1742. IF mouse$ <> "YES" THEN
  1743.     GOSUB InputBox
  1744.     LOCATE 18, 12
  1745.     PRINT "Enter 0 for no background"
  1746.     LOCATE 16, 12
  1747.     INPUT "Enter the number for the background character (0-3):", paintchar
  1748.     IF paintchar = 0 THEN pchar = 32
  1749.     IF paintchar = 1 THEN pchar = 176
  1750.     IF paintchar = 2 THEN pchar = 177
  1751.     IF paintchar = 3 THEN pchar = 178
  1752. END IF
  1753. IF mouse$ = "YES" THEN
  1754.     GOSUB InputBox
  1755.     LOCATE 16, 12
  1756.     PRINT "Click on your choice of background characters"
  1757.     LOCATE 18, 12
  1758.     PRINT "Click under 0 for no background character"
  1759.     MouseOn
  1760.     DO
  1761.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1762.     LOOP UNTIL isbutton$ = "DOWN"
  1763.     
  1764.     pchar = SCREEN(mousey + 1, mousex + 1)
  1765.     MouseOff
  1766.     CALL WaitaBit(.15)
  1767. END IF
  1768. isbutton$ = "UP"
  1769.  
  1770.  
  1771. GOSUB InputBox
  1772. LOCATE 16, 24
  1773. PRINT "Save this color set to disk?"
  1774. GOSUB YesNoButton
  1775. save$ = LEFT$(response$, 1)
  1776. response$ = ""
  1777. MouseOff
  1778. CALL WaitaBit(.15)
  1779.  
  1780. IF save$ = "Y" THEN
  1781.     colorfile$ = envpath$ + "MCOLOR.DAT"
  1782.     OPEN colorfile$ FOR OUTPUT AS #1
  1783.     PRINT #1, fg
  1784.     PRINT #1, bg
  1785.     PRINT #1, pchar
  1786.     CLOSE #1
  1787. END IF
  1788. MouseOff
  1789. RETURN
  1790.  
  1791. figurecolor:
  1792. IF raw = 7 THEN fixed = 0
  1793. IF raw = 118 THEN fixed = 1
  1794. IF raw = 117 THEN fixed = 2
  1795. IF raw = 116 THEN fixed = 3
  1796. IF raw = 115 THEN fixed = 4
  1797. IF raw = 114 THEN fixed = 5
  1798. IF raw = 113 THEN fixed = 6
  1799. IF raw = 112 THEN fixed = 7
  1800. IF raw = 127 THEN fixed = 8
  1801. IF raw = 126 THEN fixed = 9
  1802. IF raw = 125 THEN fixed = 10
  1803. IF raw = 124 THEN fixed = 11
  1804. IF raw = 123 THEN fixed = 12
  1805. IF raw = 122 THEN fixed = 13
  1806. IF raw = 121 THEN fixed = 14
  1807. IF raw = 120 THEN fixed = 15
  1808. RETURN
  1809.  
  1810. GetConfig:
  1811.  
  1812. 'Here you read in any variables you've saved. It's up to you.
  1813. ON ERROR GOTO configerr
  1814. confignum = FREEFILE
  1815. configa$ = envpath$ + "IFACE.CFG"
  1816. OPEN configa$ FOR INPUT AS #confignum
  1817. REM INPUT #confignum, variable1
  1818. REM INPUT #confignum, variable2
  1819. REM INPUT #confignum, variable3
  1820. REM INPUT #confignum, variable4
  1821. CLOSE #confignum
  1822.  
  1823. noerror:
  1824. CLOSE #confignum
  1825. ON ERROR GOTO 0
  1826. RETURN
  1827.  
  1828. configerr:
  1829. configflag = 1
  1830. RESUME noerror
  1831.  
  1832.  
  1833.  
  1834.  
  1835. ShareInfo:
  1836. MakeBox "SHAREWARE INFORMATION", 9, 2, 78, 15, 1, fg, bg, pchar
  1837. LOCATE 10, 3
  1838. PRINT "                         Interface PLUS Registration"
  1839. LOCATE 12, 5
  1840. PRINT "This is a shareware program. If you use it to create other programs,"
  1841. LOCATE 13, 5
  1842. PRINT "you must register your copy. Registration fees vary according to the"
  1843. LOCATE 14, 5
  1844. PRINT "way you use the program. You may use it for personal programs at no"
  1845. LOCATE 15, 5
  1846. PRINT "charge. If you use it to create a shareware program, the one-time fee"
  1847. LOCATE 16, 5
  1848. PRINT "is $60.00. If you use it to create a commercial program, the fee is"
  1849. LOCATE 17, 5
  1850. PRINT "$1000. No royalties are required in either case. You may alter the"
  1851. LOCATE 18, 5
  1852. PRINT "source code, but must not remove the copyright notice."
  1853. LOCATE 20, 33
  1854. PRINT "George Campbell"
  1855. LOCATE 21, 32
  1856. PRINT "1472 Sixth Street"
  1857. LOCATE 22, 31
  1858. PRINT "Los Osos, CA  93402"
  1859. oky = 20
  1860. okx = 60
  1861. GOSUB MoveOkButton
  1862. RETURN
  1863.  
  1864. GetOldDir:
  1865. COLOR bg, bg
  1866. CLS
  1867. SHELL "dir >direct~.txt"
  1868. OPEN "direct~.txt" FOR INPUT AS #1
  1869. DO
  1870.     LINE INPUT #1, test$
  1871. LOOP UNTIL INSTR(test$, ":")
  1872. location = INSTR(test$, ":")
  1873. PRINT location
  1874. originaldir$ = MID$(test$, (location - 1))
  1875. PRINT olddir$
  1876. CLOSE #1
  1877. olddir$ = originaldir$
  1878. newdir$ = olddir$
  1879. KILL "direct~.txt"
  1880. RETURN
  1881.  
  1882. ScreenTest:
  1883.  
  1884. 'Checks for type of graphic card and monitor installed
  1885. vgatest:
  1886. scrtype$ = ""
  1887. ON ERROR GOTO novga
  1888. SCREEN 12
  1889. scrtype$ = "VGA"
  1890. GOTO goagain
  1891.  
  1892. novga:
  1893. RESUME mcgatest
  1894.  
  1895. mcgatest:
  1896.  
  1897. ON ERROR GOTO nomcga
  1898. SCREEN 13
  1899. scrtype$ = "MCGA"
  1900. GOTO goagain
  1901.  
  1902.  
  1903. nomcga:
  1904. RESUME egatest
  1905.  
  1906. egatest:
  1907. ON ERROR GOTO noega
  1908. SCREEN 9
  1909. scrtype$ = "EGA"
  1910. GOTO goagain
  1911.  
  1912.  
  1913. noega:
  1914. RESUME cgatest
  1915.  
  1916. cgatest:
  1917. ON ERROR GOTO nocga
  1918. SCREEN 1
  1919. scrtype$ = "CGA"
  1920. GOTO goagain
  1921.  
  1922.  
  1923. nocga:
  1924. scrtype$ = "MONO"
  1925. RESUME goagain
  1926.  
  1927. goagain:
  1928. SCREEN 0
  1929. ON ERROR GOTO 0
  1930. RETURN
  1931.  
  1932. ShowStuff:
  1933.  
  1934. MakeBox "What Interface PLUS Knows", 4, 1, 80, 20, 1, fg, bg, pchar
  1935.  
  1936. LOCATE 6, 3
  1937. PRINT "Video Type (scrtype$): "; scrtype$
  1938. LOCATE 7, 3
  1939. PRINT "Mouse available (mouse$): "; mouse$
  1940. LOCATE 8, 3
  1941. PRINT "Current Path (newdir$): "; newdir$
  1942. LOCATE 9, 3
  1943. PRINT "Original Path (originaldir$): "; originaldir$
  1944. LOCATE 10, 3
  1945. PRINT "Datapath (envpath$): "; envpath$
  1946. LOCATE 11, 3
  1947. PRINT "Current active drive: "; LEFT$(newdir$, 2)
  1948. LOCATE 12, 3
  1949. PRINT "File mask (mask$): "; mask$
  1950. LOCATE 13, 3
  1951. PRINT "Current foreground color: "; fg
  1952. LOCATE 14, 3
  1953. PRINT "Current background color: "; bg
  1954. LOCATE 15, 3
  1955. PRINT "File loaded (filechoice$): "; filechoice$
  1956. LOCATE 16, 3
  1957. GOSUB MemSize
  1958. PRINT "Memory size (sizeram): "; sizeram; "K"
  1959. LOCATE 17, 3
  1960. PRINT "Drives Currently Active: ";
  1961. IF drive$(1) = "Y" THEN PRINT "A: ";
  1962. IF drive$(2) = "Y" THEN PRINT "B: ";
  1963. IF drive$(3) = "Y" THEN PRINT "C: ";
  1964. IF drive$(4) = "Y" THEN PRINT "D: ";
  1965. IF drive$(5) = "Y" THEN PRINT "E: ";
  1966. IF drive$(6) = "Y" THEN PRINT "F: ";
  1967. IF drive$(7) = "Y" THEN PRINT "G: ";
  1968. IF drive$(8) = "Y" THEN PRINT "H: ";
  1969. LOCATE 18, 3
  1970. PRINT "Command line parameters(3): "; command1$, command2$, command3$
  1971. LOCATE 19, 3
  1972. PRINT "DOS version:"; version; "+"
  1973.  
  1974. oky = 20
  1975. okx = 74
  1976. GOSUB MoveOkButton
  1977.  
  1978. RETURN
  1979.  
  1980.  
  1981. MemSize:
  1982.         CALL Interrupt(18, regs, regs)
  1983.         sizeram = regs.ax
  1984. RETURN
  1985.  
  1986.  
  1987.  
  1988. '==================================================================
  1989. 'The section below contains CALLed subroutines. It's best
  1990. 'to keep only those routines here. QB will handle it automatically.
  1991. '==================================================================
  1992.  
  1993. SUB FirstFile (filespec$, filename$)
  1994.  
  1995. filespec$ = filespec$ + CHR$(0)
  1996. DIM inreg AS register, outreg AS register
  1997. inreg.ax = &H4E00
  1998. inreg.dx = SADD(filespec$)
  1999. inreg.ds = VARSEG(filespec$)
  2000. inreg.cx = 0
  2001. CALL Interrupt(&H21, inreg, outreg)
  2002. IF (outreg.flags AND 1) = 0 THEN
  2003.     CALL MakeName(filename$)
  2004. ELSE
  2005.     filename$ = ""
  2006. END IF
  2007. END SUB
  2008.  
  2009. SUB GetVer (version)
  2010.  
  2011. DIM regs AS register
  2012. regs.ax = &H3000
  2013. CALL Interrupt(&H21, regs, regs)
  2014. IF regs.ax AND &HFF = 0 THEN regs.ax = &H1
  2015. version = regs.ax AND &HFF
  2016. END SUB
  2017.  
  2018. SUB MakeBox (title$, uly, ulx, bwide, bhigh, linesty, fg, bg, pchar)
  2019.  
  2020. SELECT CASE linesty
  2021.     CASE 1
  2022.         ulc$ = "╔"
  2023.         blc$ = "╚"
  2024.         urc$ = "╗"
  2025.         brc$ = "╝"
  2026.         hc$ = "═"
  2027.         vc$ = "║"
  2028.  
  2029.     CASE 2
  2030.         ulc$ = "┌"
  2031.         blc$ = "└"
  2032.         urc$ = "┐"
  2033.         brc$ = "┘"
  2034.         hc$ = "─"
  2035.         vc$ = "│"
  2036.  
  2037.     CASE 3
  2038.         ulc$ = "╒"
  2039.         blc$ = "╘"
  2040.         urc$ = "╕"
  2041.         brc$ = "╛"
  2042.         hc$ = "═"
  2043.         vc$ = "│"
  2044.  
  2045.     CASE 4
  2046.         ulc$ = CHR$(pchar)
  2047.         urc$ = CHR$(pchar)
  2048.         blc$ = CHR$(pchar)
  2049.         brc$ = CHR$(pchar)
  2050.         hc$ = CHR$(pchar)
  2051.         vc$ = " "
  2052.  
  2053.     CASE ELSE
  2054.         ulc$ = " "
  2055.         blc$ = " "
  2056.         urc$ = " "
  2057.         brc$ = " "
  2058.         hc$ = " "
  2059.         vc$ = " "
  2060. END SELECT
  2061.  
  2062. IF (uly + bhigh) > 24 THEN bhigh = 24 - uly
  2063. IF (ulx + bwide) > 81 THEN bwide = 81 - ulx
  2064. IF (ulx + bwide) < 80 THEN shadow$ = "GC21"
  2065.  
  2066. COLOR fg, bg
  2067. LOCATE uly, ulx
  2068. PRINT ulc$; STRING$(bwide - 2, hc$); urc$
  2069. FOR x = 1 TO bhigh - 2
  2070.     LOCATE , ulx
  2071.     PRINT vc$; SPACE$(bwide - 2); vc$
  2072. NEXT
  2073. LOCATE , ulx
  2074. PRINT blc$; STRING$(bwide - 2, hc$); brc$;
  2075. IF LEN(title$) > bwide - 2 THEN title$ = ""
  2076. IF NOT title$ = "" THEN
  2077.     LOCATE uly, ulx + ((bwide - 2) / 2) - (LEN(title$)) / 2
  2078.     COLOR bg, fg
  2079.     PRINT " "; title$; " "
  2080.     COLOR fg, bg
  2081. END IF
  2082.  
  2083.  
  2084. END SUB
  2085.  
  2086. SUB MakeName (fullname$)
  2087.  
  2088. SHARED memdta$
  2089. endofstr% = INSTR(31, memdta$, CHR$(0))
  2090. fullname$ = MID$(memdta$, 31, endofstr% - 31)
  2091. END SUB
  2092.  
  2093. SUB MouseBar.Menu (sel, sel$(), fg, bg, pchar, msg$, topline, submenu, mouse$)
  2094.  
  2095. DIM a(20)
  2096.       
  2097.        s$ = ""
  2098.        a = 0
  2099.  
  2100. '===== Clear Screen
  2101.     COLOR fg, bg
  2102.       
  2103.        FOR i = 1 TO 25
  2104.      LOCATE i, 1
  2105.      PRINT STRING$(80, CHR$(pchar));
  2106.        NEXT
  2107.      
  2108. '===== Clear line 25
  2109.       
  2110.        LOCATE 25, 1
  2111.        COLOR 15, fg
  2112.        PRINT SPACE$(80);
  2113.        COLOR fg, bg
  2114.       
  2115. '====== Create Program Logo
  2116. '====== Insert your own program info here
  2117.     LOCATE 15, 10
  2118.     PRINT "╔";
  2119.     FOR topx = 1 TO 58
  2120.     PRINT "═";
  2121.     NEXT topx
  2122.     PRINT "╗"
  2123.     LOCATE 16, 10: PRINT "║"; SPACE$(58); "║"
  2124.     LOCATE 17, 10: PRINT "║"; SPACE$(58); "║"
  2125.     LOCATE 18, 10: PRINT "║"; SPACE$(58); "║"
  2126.     LOCATE 19, 10
  2127.     PRINT "╚";
  2128.     FOR bottomx = 1 TO 58
  2129.     PRINT "═";
  2130.     NEXT bottomx
  2131.     PRINT "╝";
  2132.     title$ = "Interface PLUS"
  2133.     CopyRight$ = "Copyright, 1990, by George Campbell"
  2134.     heading$ = "The Intelligent Front End for your Programs"
  2135.     LOCATE 16, (80 - LEN(title$)) / 2
  2136.     PRINT title$
  2137.     LOCATE 18, (80 - LEN(heading$)) / 2
  2138.     PRINT heading$
  2139.     LOCATE 17, (80 - LEN(CopyRight$)) / 2
  2140.     PRINT CopyRight$
  2141.  
  2142.  
  2143.  
  2144. '===== Get the length of each sel$,
  2145. '===== then get the 1st character of each sel$ and build a string of them
  2146. '===== this string is used to select based on letters.
  2147. '===== Finish when sel$=""
  2148.       
  2149.        i = -1
  2150.        DO
  2151.       i = i + 1
  2152.       a(i) = LEN(sel$(i, 0))
  2153.       z$ = LTRIM$(sel$(i, 0))
  2154.       s$ = s$ + UCASE$(LEFT$(z$, 1))
  2155.        LOOP WHILE sel$(i, 0) <> ""
  2156.     
  2157. '===== Establish the right number of menu titles
  2158.       
  2159.        sel = i - 1
  2160.    
  2161. '==== Print the top line message.
  2162.        LOCATE 1, 1
  2163.        COLOR fg, bg
  2164.        t = INT((78 - LEN(msg$)) / 2)
  2165.        IF t * 2 + LEN(msg$) < 78 THEN f$ = STRING$((78 - (t * 2 + LEN(msg$))), "═") ELSE f$ = ""
  2166.        PRINT "╔" + STRING$(t, "═") + msg$ + f$ + STRING$(t, "═") + "╗";
  2167.       
  2168. '===== Print blank line on middle row
  2169.  
  2170.        PRINT "║" + SPACE$(78) + "║";
  2171.        
  2172.      
  2173. '===== Print menu titles on middle row
  2174.  
  2175.        LOCATE 2, 2
  2176.        FOR i = 0 TO sel
  2177.      PRINT sel$(i, 0);
  2178.        NEXT
  2179.   
  2180. '===== Print bottom row  of box
  2181.       
  2182.        LOCATE 3, 1
  2183.        PRINT "╚" + STRING$(78, "═") + "╝";
  2184.  
  2185. '===== Choose the menu entry to be displayed
  2186.        subsel = 1
  2187.        IF submenu <> 0 THEN subsel = submenu
  2188.        subnum = 1
  2189.        zold = 2
  2190.        s = 0
  2191.        IF topline <> 0 THEN s = topline
  2192.        x = 2
  2193.  
  2194. '===== Display submenu
  2195.  
  2196.   GOSUB dis.sub
  2197.  
  2198.        
  2199. '
  2200. '===== Highlight menu selection
  2201. '
  2202. lp:
  2203.        oldx = x
  2204.        x = 2
  2205.  
  2206. '===== Calculate cursor position
  2207.      
  2208.        FOR i = 0 TO s
  2209.      x = x + LEN(sel$(i, 0))
  2210.        NEXT
  2211.  
  2212. '===== Set cursor position to start of selection string
  2213.      
  2214.        x = x - LEN(sel$(i - 1, 0))
  2215.    
  2216.  
  2217. '===== Put OLD selection back to original color
  2218.  
  2219.        COLOR fg, bg
  2220.        LOCATE 2, oldx
  2221.        PRINT sel$(olds, 0);
  2222.    
  2223. '===== Select NEW selection with highlite color
  2224.    
  2225.        IF mouse$ = "YES" THEN MouseOff
  2226.        COLOR 15, fg
  2227.        LOCATE 2, x
  2228.        PRINT RTRIM$(sel$(s, 0)) + " ";
  2229.    
  2230.  
  2231. '===== Print sel$(s,10) 'message string' on line 25
  2232.  
  2233.        t = INT((80 - LEN(sel$(s, 10))) / 2)
  2234.        IF t * 2 + LEN(sel$(s, 10)) < 78 THEN f$ = STRING$((78 - (t * 2 + LEN(sel$(s, 10)))), "═") ELSE f$ = ""
  2235.        LOCATE 25, 1
  2236.        COLOR 15, fg
  2237.        PRINT SPACE$(t) + sel$(s, 10) + f$ + SPACE$(t);
  2238.        COLOR fg, bg
  2239.  
  2240. '
  2241. '===== Wait for keypress or mouse click
  2242.  
  2243. get.key:
  2244.        DO
  2245.      IF UCASE$(mouse$) = "YES" THEN
  2246.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  2247.         IF UCASE$(isbutton$) = "DOWN" THEN
  2248.             GOSUB checkmouse
  2249.         END IF
  2250.         
  2251.     END IF
  2252.      IF NOT UCASE$(isbutton$) = "DOWN" THEN a$ = INKEY$
  2253.      
  2254.        LOOP UNTIL a$ <> ""
  2255.  
  2256. isbutton$ = ""
  2257.  
  2258. '
  2259. '===== Check for cursor keys
  2260.  
  2261.        IF LEN(a$) > 1 THEN GOTO get.curkey
  2262.       
  2263. '===== Make the key Upper Case
  2264.       
  2265.        a$ = UCASE$(a$)
  2266.  
  2267. '===== Check for escape key
  2268.  
  2269.        IF a$ = CHR$(27) THEN sel = -1: EXIT SUB
  2270. '
  2271. '===== If key is <ENTER> then return with selection number in sel
  2272. '
  2273. ret:   IF a$ <> CHR$(13) GOTO test.num
  2274.       
  2275.        sel = (s * 10) + subnum: EXIT SUB
  2276.                      
  2277.  
  2278. '===== Test for number key
  2279. test.num:
  2280.  
  2281. q = VAL(a$)
  2282. IF q >= 1 AND q <= cv AND q <= 9 AND q > 0 THEN
  2283.     subsel = q
  2284.     GOSUB update.sub
  2285.     a$ = CHR$(13): GOTO ret
  2286. END IF
  2287.       
  2288.  
  2289. '====== Test for first letter key
  2290.      
  2291. '===== If c<>0 then add 1 to c and test for match
  2292. '===== this allows multiple selections with the same letter
  2293. '===== round-robin type
  2294. '
  2295. test.ltr:
  2296.  
  2297. IF c <> 0 THEN
  2298.     c = c + 1
  2299.     c = INSTR(c, s$, a$)
  2300.     IF c <> 0 GOTO tr
  2301. END IF
  2302. c = INSTR(s$, a$)
  2303. IF c = 0 THEN GOTO get.key
  2304.  
  2305. tr:
  2306.  
  2307. olds = s
  2308. s = c - 1
  2309. subsel = 1
  2310. subnum = 1
  2311. GOSUB dis.sub
  2312. GOTO lp
  2313.  
  2314.  
  2315.  
  2316. '===== Identify cursor keys
  2317.  
  2318. get.curkey:
  2319.    
  2320. a = ASC(RIGHT$(a$, 1))
  2321. IF a <> 77 AND a <> 75 AND a <> 72 AND a <> 80 GOTO get.key
  2322. olds = s
  2323. IF a <> 77 AND a <> 75 GOTO get.updnkey
  2324.     
  2325. IF a = 77 THEN s = s + 1
  2326. IF a = 75 THEN s = s - 1
  2327. IF s > sel THEN s = 0
  2328. IF s < 0 THEN s = sel
  2329. c = s
  2330. subsel = 1
  2331. subnum = 1
  2332.    
  2333. GOSUB dis.sub
  2334. GOTO lp
  2335.  
  2336.  
  2337. get.updnkey:
  2338.  
  2339. IF a = 80 THEN subsel = subsel + 1
  2340. IF a = 72 THEN subsel = subsel - 1
  2341. GOSUB update.sub
  2342. GOTO lp
  2343.  
  2344.  
  2345. '
  2346. '===== Display the submenu box
  2347. '
  2348. dis.sub:
  2349.  
  2350. i = 0
  2351. a = 0
  2352. xtemp = x
  2353.       
  2354. COLOR fg, bg
  2355. FOR i = 1 TO cv + 2
  2356. LOCATE 3 + i, zold - 1
  2357. PRINT STRING$(aold + 6, CHR$(pchar))
  2358. NEXT
  2359.      
  2360.       
  2361. '===== Get the length of the longest string
  2362. '===== to be displayed
  2363.       
  2364.       
  2365. i = 0
  2366.       
  2367. DO
  2368.     i = i + 1
  2369.     IF LEN(sel$(s, i)) > a THEN a = LEN(sel$(s, i))
  2370. LOOP WHILE sel$(s, i) <> "" AND i < 10
  2371.       
  2372. cv = 0
  2373.       
  2374. IF i = 1 THEN RETURN
  2375. aold = a
  2376. cvold = cv
  2377. cv = i - 1
  2378. cvold = cv
  2379.  
  2380. '===== Calculate cursor position
  2381.       
  2382. x = 2
  2383. FOR i = 0 TO s
  2384. x = x + LEN(sel$(i, 0))
  2385. NEXT
  2386.  
  2387. '===== Set cursor on start of selection string
  2388.     
  2389. x = x - LEN(sel$(i - 1, 0))
  2390.  
  2391.  
  2392.  
  2393. '===== If starting position + longest string found > 80 then adjust start pos.
  2394. '===== If starting pos. < 2 then set it to 2.
  2395.  
  2396.        
  2397. IF x + a > 78 THEN z = 76 - a ELSE z = x - 5
  2398.     
  2399. IF z < 2 THEN z = 2
  2400. zold = z
  2401. LOCATE 3, 1
  2402. PRINT "╚" + STRING$(78, "═") + "╝";
  2403. LOCATE 3, x: PRINT "╗";
  2404. PRINT SPACE$(LEN(RTRIM$(sel$(s, 0))) - 1);
  2405. PRINT "╔";
  2406. LOCATE 4, z - 1: PRINT "╔" + STRING$(x - z, "═");
  2407. LOCATE 4, x: PRINT "╝";
  2408. PRINT SPACE$(LEN(RTRIM$(sel$(s, 0))) - 1);
  2409. PRINT "╚";
  2410. b = x + LEN(sel$(s, 0)) - 1
  2411. n = z + a + 4
  2412. PRINT STRING$((n) - b, "═") + "╗";
  2413.  
  2414. FOR i = 1 TO cv
  2415.     LOCATE i + 4, z - 1: PRINT "║";
  2416.     PRINT LTRIM$(STR$(i)) + ". " + sel$(s, i) + SPACE$(a - (LEN(sel$(s, i)) - 1)) + "║";
  2417. NEXT
  2418.       
  2419. LOCATE i + 4, z - 1: PRINT "╚" + STRING$(a + 4, "═") + "╝";
  2420. x = xtemp
  2421.  
  2422.  
  2423. '===== Display the selection in the submenu
  2424.  
  2425. update.sub:
  2426.       
  2427.       
  2428. IF cv = 0 THEN RETURN
  2429. IF subsel > cv THEN subsel = 1
  2430. IF subsel < 1 THEN subsel = cv
  2431. LOCATE subnum + 4, z
  2432. PRINT LTRIM$(STR$(subnum)) + ". " + sel$(s, subnum);
  2433. LOCATE subsel + 4, z
  2434. COLOR 15, fg
  2435. PRINT LTRIM$(STR$(subsel)) + ". " + sel$(s, subsel);
  2436. subnum = subsel
  2437. RETURN
  2438.  
  2439. '===== Identify menu item chosen by mouse click
  2440.  
  2441. checkmouse:
  2442. LOCATE 24, 12
  2443. IF mousey > 3 OR mousey < 11 THEN
  2444.     IF SCREEN(mousey + 1, mousex + 1) <> pchar THEN
  2445.         a$ = LTRIM$(STR$(mousey - 3))
  2446.     END IF
  2447. END IF
  2448. IF mousey = 1 THEN
  2449.     realx = mousex + 1
  2450.     realy = 2
  2451.     IF NOT SCREEN(realy, realx) = 32 THEN
  2452.         testx = realx
  2453.         DO
  2454.             getchar = SCREEN(realy, testx - 1)
  2455.             testx = testx - 1
  2456.         LOOP WHILE getchar <> 32
  2457.         menuchar = SCREEN(realy, testx + 1)
  2458.         a$ = CHR$(menuchar)
  2459.     END IF
  2460. END IF
  2461.  
  2462. RETURN
  2463.  
  2464.  
  2465. END SUB
  2466.  
  2467. SUB MouseDriver (m0, m1, m2, m3) STATIC
  2468. '============================================================================
  2469. '  MouseDriver uses interrupt 51 to invoke mouse functions.
  2470. '============================================================================
  2471.  
  2472.    DIM regs AS register
  2473.  
  2474.    regs.ax = m0
  2475.    regs.bx = m1
  2476.    regs.cx = m2
  2477.    regs.dx = m3
  2478.  
  2479.    Interrupt 51, regs, regs
  2480.   
  2481.    m0 = regs.ax
  2482.    m1 = regs.bx
  2483.    m2 = regs.cx
  2484.    m3 = regs.dx
  2485.  
  2486. END SUB
  2487.  
  2488. SUB MouseGetInfo (mousex, mousey, isbutton$, mouse$, a$)
  2489.  
  2490. '============================================================================
  2491. '  MouseGetInfo returns the mouse coordinates and button status
  2492. '  as mousex, mousey, and isbutton$
  2493. '============================================================================
  2494.  
  2495.    DIM Buffer(4000)
  2496.    isbutton$ = "UP"
  2497.    CALL WaitaBit(.15)
  2498.    IF mouse$ = "YES" THEN MouseOn
  2499.   
  2500.    m1 = 3               'Mouse function 3, Get Button Status and Mouse Position
  2501.   
  2502.       MouseDriver m1, m2, m3, m4
  2503.       mousex = m3 \ 8
  2504.       mousey = m4 \ 8
  2505.       IF (m2 AND 1) = 1 OR (m2 AND 2) = 2 OR m2 = 3 THEN isbutton$ = "DOWN" ELSE isbutton$ = "UP"
  2506.  
  2507. END SUB
  2508.  
  2509. SUB MouseInit (mouse$)
  2510. '============================================================================
  2511. '  MouseInit checks, then initializes the mouse
  2512. '============================================================================
  2513.  
  2514.    DIM Buffer(4000)
  2515.  
  2516.    COLOR 7, 0                   'FOREGROUND = white, BACKGROUND = black
  2517.    
  2518.    m1 = 0
  2519.    MouseDriver m1, m2, m3, m4
  2520.   
  2521.    IF NOT m1 THEN
  2522.     mouse$ = "NO"
  2523.    ELSE
  2524.     mouse$ = "YES"
  2525.    END IF
  2526.  
  2527.  
  2528. END SUB
  2529.  
  2530. SUB MouseOff
  2531. '============================================================================
  2532. '  MouseOff turns the mouse cursor off.
  2533. '============================================================================
  2534.  
  2535.    m1 = 2
  2536.    MouseDriver m1, m2, m3, m4
  2537.  
  2538. END SUB
  2539.  
  2540. SUB MouseOn
  2541. '============================================================================
  2542. 'MouseOn turns the mouse cursor on.
  2543. '============================================================================
  2544.   
  2545.    m1 = 1
  2546.    MouseDriver m1, m2, m3, m4
  2547.  
  2548. END SUB
  2549.  
  2550. '===============================================
  2551. 'Moves mouse cursor to specific screen location.
  2552. '===============================================
  2553. SUB MoveMouse (mmousey, mmousex)
  2554. DIM regs AS register
  2555. regs.ax = 4
  2556. regs.cx = (mmousex - 1) * 8
  2557. regs.dx = (mmousey - 1) * 8
  2558. WaitaBit .15
  2559. Interrupt 51, regs, regs
  2560.  
  2561. END SUB
  2562.  
  2563. SUB NextFile (filename$)
  2564. DIM inreg AS register, outreg AS register
  2565. inreg.ax = &H4F00
  2566. CALL Interrupt(&H21, inreg, outreg)
  2567. IF (outreg.flags AND 1) = 0 THEN
  2568.     CALL MakeName(filename$):
  2569. ELSE
  2570.     filename$ = ""
  2571. END IF
  2572. END SUB
  2573.  
  2574. SUB SetMemDta (memdta$)
  2575. DIM inreg AS register, outreg AS register
  2576. inreg.dx = SADD(memdta$)
  2577. inreg.ds = VARSEG(memdta$)
  2578. inreg.ax = &H1A00
  2579. CALL Interrupt(&H21, inreg, outreg)
  2580.  
  2581. END SUB
  2582.  
  2583. '
  2584. '===== hold! is measured in seconds. Accurate to .01 sec.
  2585. '
  2586. SUB WaitaBit (hold!)
  2587. delay! = TIMER + hold!
  2588. WHILE TIMER < delay!: WEND
  2589. END SUB
  2590.  
  2591. '
  2592. '=====Passes keystroke through a filter.  If it's a special key
  2593. '=====the name of the key is returned. Else the keystroke returns.
  2594. '=====This routine is fast enough for any typing speed.
  2595. '
  2596. SUB WhatKey (keypress$)
  2597. IF LEN(keypress$) = 1 THEN
  2598.     IF ASC(keypress$) = 13 THEN keypress$ = "ENTER"
  2599.     IF ASC(keypress$) = 9 THEN keypress$ = "TAB"
  2600.     IF ASC(keypress$) = 8 THEN keypress$ = "BACK"
  2601.     IF ASC(keypress$) = 27 THEN keypress$ = "ESC"
  2602. END IF
  2603.  
  2604. IF LEN(keypress$) = 2 THEN
  2605.     second$ = RIGHT$(keypress$, 1)
  2606. SELECT CASE second$
  2607.     
  2608.     CASE "H"
  2609.          keypress$ = "CRSUP"
  2610.     CASE "P"
  2611.         keypress$ = "CRSDOWN"
  2612.     CASE "K"
  2613.         keypress$ = "LEFT"
  2614.     CASE "M"
  2615.         keypress$ = "RIGHT"
  2616.     CASE "G"
  2617.         keypress$ = "HOME"
  2618.     CASE "O"
  2619.         keypress$ = "END"
  2620.     CASE "R"
  2621.         keypress$ = "INS"
  2622.     CASE "S"
  2623.         keypress$ = "DEL"
  2624.     CASE "I"
  2625.         keypress$ = "PGUP"
  2626.     CASE "Q"
  2627.         keypress$ = "PGDN"
  2628.     CASE CHR$(15)
  2629.         keypress$ = "SHFTTAB"
  2630.     CASE "w"
  2631.         keypress$ = "CTRLHOME"
  2632.     CASE "u"
  2633.         keypress$ = "CTRLEND"
  2634.     CASE "s"
  2635.         keypress$ = "CTRLLEFT"
  2636.     CASE "t"
  2637.         keypress$ = "CTRLRIGHT"
  2638.     CASE "v"
  2639.         keypress$ = "CTRLPGDN"
  2640.     CASE CHR$(132)
  2641.         keypress$ = "CTRLPGUP"
  2642.     CASE ";"
  2643.         keypress$ = "F1"
  2644.     CASE "<"
  2645.         keypress$ = "F2"
  2646.     CASE "="
  2647.         keypress$ = "F3"
  2648.     CASE ">"
  2649.         keypress$ = "F4"
  2650.     CASE "?"
  2651.         keypress$ = "F5"
  2652.     CASE "@"
  2653.         keypress$ = "F6"
  2654.     CASE "A"
  2655.         keypress$ = "F7"
  2656.     CASE "B"
  2657.         keypress$ = "F8"
  2658.     CASE "C"
  2659.         keypress$ = "F9"
  2660.     CASE "D"
  2661.         keypress$ = "F10"
  2662.     CASE "à"
  2663.         keypress$ = "F11"
  2664.     CASE "å"
  2665.         keypress$ = "F12"
  2666.     
  2667.     CASE "h"
  2668.         keypress$ = "AF1"
  2669.     CASE "i"
  2670.         keypress$ = "AF2"
  2671.     CASE "j"
  2672.         keypress$ = "AF3"
  2673.     CASE "k"
  2674.         keypress$ = "AF4"
  2675.     CASE "l"
  2676.         keypress$ = "AF5"
  2677.     CASE "m"
  2678.         keypress$ = "AF6"
  2679.     CASE "n"
  2680.         keypress$ = "AF7"
  2681.     CASE "o"
  2682.         keypress$ = "AF8"
  2683.     CASE "p"
  2684.         keypress$ = "AF9"
  2685.     CASE "q"
  2686.         keypress$ = "AF10"
  2687.     CASE "ï"
  2688.         keypress$ = "AF11"
  2689.     CASE "î"
  2690.         keypress$ = "AF12"
  2691.     CASE "T"
  2692.         keypress$ = "SF1"
  2693.     CASE "U"
  2694.         keypress$ = "SF2"
  2695.     CASE "V"
  2696.         keypress$ = "SF3"
  2697.     CASE "W"
  2698.         keypress$ = "SF4"
  2699.     CASE "X"
  2700.         keypress$ = "SF5"
  2701.     CASE "Y"
  2702.         keypress$ = "SF6"
  2703.     CASE "Z"
  2704.         keypress$ = "SF7"
  2705.     CASE "["
  2706.         keypress$ = "SF8"
  2707.     CASE "\"
  2708.         keypress$ = "SF9"
  2709.     CASE "]"
  2710.         keypress$ = "SF10"
  2711.     CASE "ç"
  2712.         keypress$ = "SF11"
  2713.     CASE "ê"
  2714.         keypress$ = "SF12"
  2715.     CASE "^"
  2716.         keypress$ = "CF1"
  2717.     CASE "_"
  2718.         keypress$ = "CF2"
  2719.     CASE "`"
  2720.         keypress$ = "CF3"
  2721.     CASE "a"
  2722.         keypress$ = "CF4"
  2723.     CASE "b"
  2724.         keypress$ = "CF5"
  2725.     CASE "c"
  2726.         keypress$ = "CF6"
  2727.     CASE "d"
  2728.         keypress$ = "CF7"
  2729.     CASE "e"
  2730.         keypress$ = "CF8"
  2731.     CASE "f"
  2732.         keypress$ = "CF9"
  2733.     CASE "g"
  2734.         keypress$ = "CF10"
  2735.     CASE "ë"
  2736.         keypress$ = "CF11"
  2737.     CASE "è"
  2738.         keypress$ = "CF12"
  2739.     END SELECT
  2740. END IF
  2741.  
  2742. END SUB
  2743.  
  2744.